Skip to main content

Sliding window

Find max​

JavaScript

let fn = (arr) => {
let left = 0;
let ans = 0;
let curr = 0;

for (let right = 0; right < arr.length; right++) {
// do logic here to add arr[right] to curr

while (WINDOW_CONDITION_BROKEN) {
// remove arr[left] from curr
left++;
}

// update ans
answer = Math.max(anser, right - left + 1);
}

return ans;
};

TypeScript

let fn = (arr: number[]): number => {
let left = 0, ans = 0, curr = 0;

for (let right = 0; right < arr.length; right++) {
// Add arr[right] to curr
curr += arr[right];

while (/* WINDOW_CONDITION_BROKEN */) {
// Remove arr[left] from curr
curr -= arr[left];
left++;
}

// Update ans based on the current window
// ans = some logic to update ans based on curr
answer = Math.max(anser, right - left + 1);
}

return ans;
}

Find min​

JavaScript

var minSubArrayLen = function (target, nums) {
let sum = 0;
let left = 0;
let ans = Infinity;

for (let i = 0; i < nums.length; i++) {
sum += nums[i];

while (sum >= target) {
sum -= nums[left];
ans = Math.min(ans, i - left + 1);
left++;
}
}

return ans === Infinity ? 0 : ans;
};

TypeScript

var minSubArrayLen = function (target: number, nums: number[]): number {
let sum = 0;
let left = 0;
let ans = Infinity;

for (let i = 0; i < nums.length; i++) {
sum += nums[i];

while (sum >= target) {
sum -= nums[left];
ans = Math.min(ans, i - left + 1);
left++;
}
}

return ans === Infinity ? 0 : ans;
};

Example​

Subarray Product Less Than K​

Given an array of integers nums and an integer k, return the number of contiguous subarrays where the product of all the elements in the subarray is strictly less than k.

Input: nums = [10,5,2,6], k = 100
Output: 8
Explanation: The 8 subarrays that have product less than 100 are:
[10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6]
Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k.
var numSubarrayProductLessThanK = function (nums, k) {
if (k <= 1) return 0;

let left = 0;
let mult = 1;
let ans = 0;

for (let right = 0; right < nums.length; right++) {
mult = mult * nums[right];

while (mult >= k) {
mult = mult / nums[left];
left++;
}

ans += right - left + 1;
}

return ans;
};

Static window size​

JavaScript

var findBestSubarray = function (nums, k) {
let curr = 0;
for (let i = 0; i < k; i++) {
curr += nums[i];
}

let ans = curr;
for (let i = k; i < nums.length; i++) {
curr += nums[i] - nums[i - k];
ans = Math.max(ans, curr);
}

return ans;
};

TypeScript

var findBestSubarray = function (nums: number[], k: number): number {
let curr = 0;
for (let i = 0; i < k; i++) {
curr += nums[i];
}

let ans = curr;
for (let i = k; i < nums.length; i++) {
curr += nums[i] - nums[i - k];
ans = Math.max(ans, curr);
}

return ans;
};